package Git2024_5_18;

public class Project2 {
    /**
     * 每日一记:
     * 1.Spring MVC的执行流程
     *      请求-->前端控制器->处理器映射器->前端控制器->处理器适配器->处理器控制器
     *      ->返回MAV给前端控制器->视图解析器[确认模型数据和具体的视图文件]
     *      ->前端控制器[渲染页面:模型数据填充到视图组件中,返回响应给客户端]
     */

    /**
     * 出现问题:
     * 数据库中存储的时间是亚洲上海的时间 但是查询数据时 返回的时间是格林尼治标准时间 相差了8小时
     * 解决措施:
     * 引入注解
     * @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")                                           --参数级注解--
     * @InitBinder 主要作用是在处理HTTP请求之前,自定义数据绑定的过程 ———— 因此可以用来自定义时间格式 但是较麻烦 --方法级别[控制器级别]--
     * @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "Asia/Shanghai")                   --属性级注解--
     * 两个属性的格式:
     * 1.pattern: 日期时间格式: 小大小 大小小
     *  1.1 yyyy-MM-dd HH:mm:ss
     *  1.2 yyyy/MM/dd HH:mm:ss
     *  1.3 yyyy年MM月dd日 HH时mm分ss秒
     * 2.timezone: 时区 默认是UTC
     *  2.1 Asia/Shanghai
     *  2.2 GMT+8(东八区)
     */
    /**
     * 前端注释:
     * 1.前端代码文件一般存于 `resources/static` 目录下供测试使用
     * 2.当将前端页面代码复制进 `resources/static` 目录时 要进行 `rebuild` 操作[或直接重启工程]
     * 3.测试时进入浏览器 输入对应的请求地址+对应功能名称.html即可
     * 4.当页面出现的是先前缓存的内容 则使用快捷键 `shift`+`F5` 进行强制刷新即可进入最新页面
     */
    //Lombok库🆒👏
    /**
     * Lombok
     * java中的库 用于消除模板代码 简化了java代码的编写过程 减少了重复性的开发工作
     * 使用时需要导入依赖并刷新maven
     * 作用:
     *`1`.消除模板代码[包含setter and getter,toString等]
     * @Getter 用于生成getter方法
     * @Setter 用于生成setter方法
     * @ToString 用于生成ToString方法
     * @Data 集成了上述三个注解 用于生成getter方法 setter方法 ToString方法
     * @AllArgsConstructor 生成全参构造方法
     * @NoArgsConstructor 生成无参构造方法
     *`2`.日志功能
     * 日志分为五大级别(级别升序排序)
     *   --一旦设置了某个日志级别 则只会显示该级别以及比该级别更为严重的日志级别内容[一般常用DEBUG<开发过程>,INFO<正式运营过程>,ERROR<开发过程中排错时使用 将错误收录起来或显示具体错误信息>]--
     * 1.TRACE 追踪级别 最详细的日志信息 通常在调试时使用 消耗资源极大 使用较少
     * 2.DEBUG 调试级别 在`开发`过程中 用于相对较为详细的内容的日志 缺点:消耗资源较大 打印的信息较为详细
     * 3.INFO  一般级别/运行级别 显示程序运行过程中的基本信息的简略的日志 在`线上正式开始运营`时使用
     * 4.WARN  警告级别 不会影响程序运行 但是需要尽量进行解决
     * 5.ERROR 错误级别 即为抛出异常 必须要解决
     *
     * INFO为默认级别 可以手动调节
     *
     * 第1步 在配置文件中设置日志级别
     *  1.全局日志级别-整个工程-固定配置写法为:logging.level.root=级别名
     *  例如运行了登录功能:
     *      Preparing: SELECT id, password, nickname FROM user WHERE username = ?
     *      Parameters: Lucy(String)
     *      Total: 1
     *  2.局部日志级别-多个模块区分设置
     *
     * 第2步 在类(例如Controller类)上使用
     *  @Slf4j注解 [4j谐音为 `for java` --> 速记:`酸辣粉 for java]
     * 特点:
     *  1.日志注解
     *  2.在类上添加注解 会自动创建一个日志对象`log` 通过`log`可以打印不同级别的日志
     * 例如:
     *  log.trace("追踪信息")/debug("调试信息")/info("普通信息")/warn("")/error("")
     *    使用log.debug("")约束某开发中的功能模块 并将该模块日志级别设置为开发中常用的DEBUG 以减少日志打印 减少资源消耗
     *    在功能正式上线后 将该模块日志级别设置为默认的INFO级别 此时被log.debug("")约束的内容因为日志等级低于默认等级 将不再参与打印 节省资源
     */
    //Knife4j工具类
    /**
     * Knife4j 轻量化工具类
     * 作用
     * 1.做功能测试
     *      1.1 在API文档的左侧具体方法处选择某方法并点击
     *      1.2 点击在页面左侧的 `调试` 按钮 进入调试页面
     *      1.3 在其中填写必要参数值即可点击右上角 `发送` 进行测试
     *      1.4 测试页面下滑 会看到响应结果的界面 如[注册功能]成功执行 响应页面显示[先前规定的方式] `1` 表示成功
     *
     * 2.生成离线API文档(文档生成工具)
     *      2.1 点击左侧 `文档管理` 中的 `离线文档` 并选择合适的格式进行下载即可
     *
     *      2.2 缺点1: `模块名(默认为接口名)`,`方法名(默认为英文)`,`参数说明(默认无)`以及`是否必须(默认为False)`等许多部分都需要手动修改设置 引入注解
     *       @Api(tags = "模块名")---类级别注解---Knife4j中的注解
     *      2.3 缺点2: 扫描指定类时 会进行完全的扫描 若某些部分不需要被扫描 需要引入注解
     *       @ApiIgnore 忽略注解---直接加在不想被扫描的参数上
     *
     * 使用方法
     * 1.添加依赖-适用于Spring Boot 2版本的(`openapi2`)
     */
    /*
      <!--添加Knife4j依赖-->
      <dependency>
         <groupId>com.github.xiaoymin</groupId>
         <artifactId>knife4j-openapi2-spring-boot-starter</artifactId>
         <version>4.3.0</version>
      </dependency>
     */
    /**
     * 2.在配置文件中设置.yml文件(也可以将其转为.properties格式) ---> 3版本为.yaml文件(也可以将其转为.properties格式)
     *   也可以在配置类中进行配置 配置信息如下蓝色注解所示
     * 3.浏览器访问 `http://ip:port/doc.html` 地址即可查看文档
     *
     * 注意 在需要被扫描生成文档的类的方法上 限定请求方法如GetMapping("")
     *     若不做具体指定 而使用RequestMapping("") 则会生成多种请求方式的方法API文档
     */
    /*
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import springfox.documentation.builders.ApiInfoBuilder;
import springfox.documentation.builders.PathSelectors;
import springfox.documentation.builders.RequestHandlerSelectors;
import springfox.documentation.service.ApiInfo;
import springfox.documentation.spi.DocumentationType;
import springfox.documentation.spring.web.plugins.Docket;
import springfox.documentation.swagger2.annotations.EnableSwagger2WebMvc;

@Configuration
@EnableSwagger2WebMvc
public class Knife4jConfig {
    //配置Swagger2的Docket的Bean实例
    @Bean
    public Docket createRestApi() {
        return new Docket(DocumentationType.SWAGGER_2)
                // apiInfo()：配置 API 的一些基本信息，比如：文档标题title，文档描述description，文档版本号version
                .apiInfo(apiInfo())
                // select()：生成 API 文档的选择器，用于指定要生成哪些 API 文档
                .select()
                // apis()：指定要生成哪个包下的 API 文档
                .apis(RequestHandlerSelectors.basePackage("cn.tedu._04weibo.controller"))
                // paths()：指定要生成哪个 URL 匹配模式下的 API 文档。这里使用 PathSelectors.any()，表示生成所有的 API 文档。
                .paths(PathSelectors.any())
                .build();
    }

    //文档信息配置
    private ApiInfo apiInfo() {
        return new ApiInfoBuilder()
                // 文档标题
                .title("微博项目")
                // 文档描述信息
                .description("微博项目在线API文档")
                // 文档版本号
                .version("1.0")
                .build();
    }
}
     */
}
